#include<iostream>


//饿汉模式
// class Singleton
// {
//     private:
//         static Singleton _eton; //类内的静态成员声明
//         //单例模式需要对构造函数和析构函数进行私有
//         //饿汉模式下对类的实例化在程序生成就存在了
//         Singleton():_data(111){
//             std::cout<<"singleton 实例化"<<std::endl;
//         }
//         ~Singleton(){}
//         Singleton(const Singleton&) = delete;   //单例模式下需要对拷贝构造和赋值运算符重载进行删除
//         Singleton& operator=(const Singleton&) = delete;
//     private:
//         int _data;
//     public:
//         //通过单例对象来调用类内的功能，在复杂的工作环境中能更好的管理
//         static Singleton& GetInstance()
//         {
//             return _eton;
//         }
//         int GetData()
//         {
//             return _data;
//         }
// };
// Singleton Singleton::_eton; //类外对类内静态成员定义

//懒汉模式
class Singleton{
    private:
        Singleton():_data(121){
            std::cout<<"singleton 实例化\n";
        }
        ~Singleton(){}
        Singleton(const Singleton&) = delete;
        int _data;
    public:
    //这边必须返回引用，因为eton是一个静态成员
    static Singleton& GetInstance()
    {
        static Singleton eton;
        return eton;
    }
    int GetData()
    {
        return _data;
    }
};


int main()
{
    //std::cout<< Singleton<int>::GetInstance().GetData()<<std::endl;
    std::cout<<Singleton::GetInstance().GetData()<<std::endl;
    Singleton::GetInstance();
    return 0;   
}
